/**
 * @fileoverview Giant Interective Group, Inc. Javascript Library v#version.
 * 该Javascript UI库是基于jQuery的扩展。
 * <pre>
 * Copyright (C) 2004-2009 Giant Interective Group, Inc. All rights reserved.
 * 版权所有 2004-2009 上海巨人网络科技有限公司
 * </pre>
 *
 * @version #version, #date
 * @author  Zhangkai
 * Depend on jQuery 1.3.x
 */
if (typeof giant === 'undefined')
    var giant = window.giant = {};
if (typeof giant.ui === 'undefined')
    giant.ui = {};
(function($) {
    /**
     * 创建一个分页组件实例
     * @class giant.ui.pagination 分页组件实例
     * @param {Object}options 与 giant.ui.pagination.defaults格式相同，若options设置，则使用options里的参数，否则直接使用giant.ui.pagination.defaults参数
     * @return {giant.ui.mousetip}的一个实例
     * @example
     * <pre>
     * //分页方式１
     * var config = {
     *      paginationCtn:"#page",
     *      currentPage:8,
     *      callBackEvent:function() {
     *          alert(this.currentPage);
     *      }
     *  };
     *  page = new giant.ui.pagination(config);
     * //分页方式２
     *  var config2 = {
     *      paginationCtn:"#smallPage",
     *      currentPage:1,
     *      paginationType:"small",
     *      callBackEvent:function() {
     *           alert(this.currentPage);
     *      }
     *  }
     *   var page2 = new giant.ui.pagination(config2);
     * </pre>
     */
    giant.ui.pagination = function(options) {
        this.opts = $.extend({}, giant.ui.pagination.defaults, options);
        this.currentPage = this.opts.currentPage;
        this.dataLength = this.opts.dataLength;
        this.pageSize = this.opts.pageSize;
        this.totalPage = Math.ceil(this.dataLength / this.pageSize);
        this._init();
    };
    giant.ui.pagination.prototype = {
        _init:function() {
            if(this.opts.paginationType == "normal"){
                this._generatePagination();

            }else{
                this._generateSmallPagination();
            }
            this._eventBind();
        },
        _generatePagination:function() {
        	 $(this.opts.paginationCtn).html('');
             if(this.totalPage==1){
                return;
            }
            var arr = [];
            if (!this.isFirstPage()) {
                if(this.opts.isFirstLastShow){
                    arr.push("<a href='###' name='first'>首页</a>");
                }
                arr.push("<a href='###' name='prev'>上一页</a>");
            }
            var start = this.currentPage - 5 < 1 ? 1 : this.currentPage - 5;
            var end = this.currentPage + 4 > this.totalPage ? this.totalPage : this.currentPage + 4;
            for (; start <= end; start++) {
                start == this.currentPage ? arr.push("<a href='###' class='current'>") : arr.push("<a href='###'>");
                arr.push(start);
                arr.push("</a>");
            }
            if (!this.isLastPage()&&this.totalPage>1) {
                arr.push("<a href='###' name='next'>下一页</a>");
                 if(this.opts.isFirstLastShow){
                     arr.push("<a href='###' name='last'>末页</a>");
                 }
            }
            $(this.opts.paginationCtn).html(arr.join(''));

        },
        _eventBind:function(){
          var $this = this;
          $(this.opts.paginationCtn).find(".page-select").unbind("click").bind("click", function() {
                $(this).toggleClass("expend");
            });
            $(this.opts.paginationCtn).find("a").unbind("click").bind("click", function() {
                switch ($(this).attr("name")) {
                    case "prev":
                        $this.currentPage = $this.getPrevPageIndex();
                        break;
                    case "next":
                        $this.currentPage = $this.getNextPageIndex();
                        break;
                    case "first":
                        $this.currentPage = 1;
                        break;
                    case "last":
                        $this.currentPage = $this.totalPage;
                        break;
                    case "current":
                        return;
                        break;
                    case "none":
                        return;
                        break;
                    default:
                        $this.currentPage = parseInt($(this).text());
                        break;
                }
                if ($this.opts.paginationType == "normal") {
                    $this._generatePagination();

                } else {
                    $this._generateSmallPagination();
                }
                $this._eventBind();
                if ($.isFunction($this.opts.callBackEvent)) {
                    $this.opts.callBackEvent.call($this);
                }
            });
        } ,
        _generateSmallPagination:function() {            //生成小分页
            $(this.opts.paginationCtn).html('');
            var $this = this;
            var arr = [];
            if(this.totalPage==1){
                return;
            }
            arr.push("<div class='pagination-m tcenter clearfix'>");
            if (!this.isFirstPage()) {
                arr.push("<a href='###'  name='prev' class='page-previous'>&lt;&lt;上一页</a>");
            }
            arr.push("<div class='page-select clearfix'>");
            arr.push("<a href='###' class='page-dis' name='none'>" + this.currentPage + "/" + this.totalPage + "</a>");
            arr.push("<div class='page-ctn'>");
            var start = this.currentPage - 5 < 1 ? 1 : this.currentPage - 5;
            var end = this.currentPage + 4 > this.totalPage ? this.totalPage : this.currentPage + 4;
            if (start != 1&&this.opts.isFirstLastShow) {
                arr.push("<a href='###' name='first' >首页</a>");
            }
            for (; start <= end; start++) {
                start == this.currentPage ? arr.push("<a href='###' name='current' class='current'>") : arr.push("<a href='###'>");
                arr.push(start);
                arr.push("</a>");
            }
            if (end != this.totalPage&&this.opts.isFirstLastShow) {
                arr.push('<a href="###" name="last">末页</a>');
            }
            arr.push("</div></div>");
            if (!this.isLastPage()&&this.totalPage>1) {
                arr.push("<a href='###' name='next' class='page-next'>下一页&gt;&gt;</a>");
            }
            arr.push("</div>");
            $(this.opts.paginationCtn).html(arr.join(''));
        },
        /**
         * 获取当前页的前一页
         * @return {Number}
         */
        getPrevPageIndex:function() {
            return this.currentPage - 1 > 1 ? this.currentPage - 1 : 1;
        },
        /**
         * 获取当前页的下一页页码
         * @return {Number}
         */
        getNextPageIndex:function() {
            return this.currentPage + 1 <= this.totalPage ? this.currentPage + 1 : 1;
        },
        /**
         * 当前页是否为最后一页
         * @return {boolean}
         */
        isLastPage:function() {
            return this.currentPage == this.totalPage;
        },
        /**
         * 当前页是否为第一页
         * @return {boolean}
         */
        isFirstPage:function() {
            return this.currentPage == 1;
        },
       /*
        * 数据源变更后（当前页数和总的条数）重新生成分页组件
        * @param {Number} 当前页
        * @param {Number} 总记录数
        * */
        reBuild:function(currentPage,dataLength){
            $(this.opts.paginationCtn).html("");
            this.currentPage = currentPage;
            this.dataLength = dataLength;
            this.totalPage = Math.ceil(this.dataLength / this.pageSize);
            this._init();
        },
        /**
         * 跳转到制定页
         * @param {Number} 需要跳转的页码
         */
        skipPage:function(index) {
            if (index >= 1 && index <= this.totalPage) {
                this.currentPage = index;
                this._init();
                if ($.isFunction(this.opts.callBackEvent)) {
                    this.opts.callBackEvent.call(this);
                }
            }
        }
    };
     /**
     * @default
     * <pre>
     * defaults.paginationCtn==>放分页控件的容器ID
     * defaults.pageSize==>每页数据条数
     * defaults.paginationType==>分页方式，我们提供两种不同的分页方式，"normal"和"small",默认为"normal"
     * defaults.dataLength==>数据长度，一共有多少条数据
     * defaults.currentPage==>当前是第几页，第一页为1，而不是0
     * callBackEvent==>分页完成后的回调函数。
     * </pre>
     */
    giant.ui.pagination.defaults = {
        paginationCtn:"#page",
        isFirstLastShow:true,
        pageSize:10,
        paginationType:"normal",
        dataLength:122,
        currentPage:1,
        callBackEvent:null
    };
})(jQuery);